package version1;

import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;

/*版本1--封装【拓展】
* Mysql工具类
* 1.数据库：地址、用户名、密码  私有属性---静态化  【本类直接调用】
* Oracle与Mysql同时具备--地址、用户名、密码
* 2.静态方法【本类直接调用】getParam(String 外置文件路径)
*  目的：使用方法调用外部文件 db_mysql.properties
*   db_mysql.properties 对应 Java  Properties类：读取键值对形式信息
*   Properties类  提供方法  load() 读取配置文件信息【键值对-数据库基本信息】
* 3.通过封装概念--链接成功数据【通用一个类链接Mysql和Oracle】
*/
public class Mysql {
    //1.任何数据库具备：地址、用户名、密码---私有静态属性
    private static  String url;
    private static  String username;
    private static  String password;
    //2.静态方法：getParam(String 路径)--链接数据库--读取信息
    //2.1 配置文件：键值对出现，保存数据库对应的基本信息  xxx.properties

    public static void  getParam(String fileName) throws IOException {
        //2.2 Properties类--读取xxx.properties配置文件信息
        Properties p=new Properties();
        //2.3 外置文件读取---借助IO---搬运数据---InputStream
        //Mysql.class 表示读取 Mysql 类的Class对象
        //理解：图书馆--区域Mysql相关书籍
        //getClassLoader() 获取当前类的加载器【加载器负责读取配置文件信息】
        //理解：图书馆--区域Mysql相关书籍----图书管理员
        //getResourceAsStream(文件) 获取读取加载器中键值对信息
        //理解：图书馆--区域Mysql相关书籍----图书管理员----拿明确的书籍
        InputStream fis=Mysql.class.getClassLoader().getResourceAsStream(fileName);
        p.load(fis);
        //2.4 读取数据库基本信息【url、用户、密码】赋值给当前对象【url、用户、密码】
        //Properties类--提供方法 getProperty()读取db_mysql.properties中键
        url=p.getProperty("url");
        username=p.getProperty("username");
        password=p.getProperty("password");
        System.out.println("测试链接成功"+url+username+password);
    }

    public static void main(String[] args) throws IOException, ClassNotFoundException, SQLException {
        //测试封装概念--链接成功数据库
        Mysql.getParam("db_mysql.properties");
        //参考Mysql封装，写Oracle封装
        //链接成功Mysql---book表--增加一条记录操作
        //1.创建链接----Connection 代表Java链接成功数据库


        /*作业3：链接成功Mysql---book表--增加一条记录操作*/
         Connection con=DriverManager.getConnection(url,username,password);
        //2.执行sql----Statement  代表执行数据 sql
        Statement st=con.createStatement();
        //3.【CRUD 操作：增删改 executeUpdate()   查executeQuery()】
        /*作业三：①增删改*/
        //String sql="insert into book values(6,'余华','活着',79,'2010年',80,'否')";
        //String sql="delete  from book where id=5";
        String sql="update book set price=100 where id=6";
        /*作业三：②查*/
        String v="select * from book";
        int rows=st.executeUpdate(sql); //执行增删改，返回值 int 类型
        ResultSet rs=st.executeQuery(v);
        System.out.println("成功"+rows+"一条记录");

        while (rs.next()){
            int id=rs.getInt("id");
            String author=rs.getString("author");
            String name=rs.getString("name");
            int price=rs.getInt("price");
            String date=rs.getString("date");
            int number=rs.getInt("number");
            String discount= rs.getString("discount");
            System.out.println("作者："+author+"打折情况"+discount);
        }
        //4.关闭链接--Statement--Connection
        st.close();
        con.close();
        rs.close();
    }
}
